/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package ec.dmz.sig.web.controlador;

import ec.dmz.seguridad.ejb.servicio.CatalogoServicio;
import ec.dmz.seguridad.ejb.model.Catalogo;
import ec.dmz.sig.web.utilitarios.Utilitarios;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

/**
 *
 * @author ishmael
 */
@ManagedBean
@ViewScoped
public class CatalogoControlador extends Utilitarios implements Serializable {

    @EJB
    private CatalogoServicio catalogoServicio;
    private Catalogo catalogo;
    private Catalogo catalogoDetalle;
    private List<Catalogo> catalogoList;
    private List<Catalogo> catalogoDetalleList;
    private boolean nuevo;

    @PostConstruct
    public void inicio() {
        nuevo();
        cargarCatalogos();
    }

    public void nuevo() {
        catalogoDetalle = new Catalogo();
        catalogo = new Catalogo();
        catalogoList = new ArrayList<Catalogo>();
        catalogoDetalleList = new ArrayList<Catalogo>();
    }

    private void cargarCatalogos() {
        try {
            catalogoList = this.catalogoServicio.obtenerCatalogoPadres();
        } catch (Exception ex) {
            Logger.getLogger(CatalogoControlador.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void guardarTipo() {
        try {
            if (this.catalogo.getCatCodigo() == null) {
                //catalogo.setCatFecharegistro(new Date());
                //catalogo.setUsuIdregistro(obtenerUsuarioLogeado().getUsuId().intValue());
                this.catalogoServicio.create(catalogo);
            } else {
                this.catalogoServicio.edit(catalogo);
            }
            nuevo();
            cargarCatalogos();
            ponerMensajeInfo(NADA, "Registro Guardado");
        } catch (Exception e) {
            ponerMensajeError(NADA, "ERROR " + e.getLocalizedMessage());
        }

    }

    public void agregarDetalle() {
        catalogoDetalle = new Catalogo();
    }

    public void editarDetalle(Catalogo detalle) {
        catalogoDetalle = detalle;
    }

    public void seleccionarCatatlogo(Catalogo catalogo) {
        this.catalogo = catalogo;
        cargarDetalles();
    }

    private void cargarDetalles() {
        try {
            this.catalogoDetalleList.clear();
            List<Catalogo> hijos = this.catalogoServicio.obtenerCatalogoPorPadre(catalogo, true);
            if (hijos != null && !hijos.isEmpty()) {
                for (Catalogo cat : hijos) {
                    this.catalogoDetalleList.add(cat);
                }
            }
        } catch (Exception ex) {
            Logger.getLogger(CatalogoControlador.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void guardarDetalle() {
        try {
            if (this.catalogoDetalle.getCatCodigo() == null) {
                //his.catalogoDetalle.setParentCatCodigo(catalogo);
               // this.catalogoDetalle.setCatFecharegistro(new Date());
               // this.catalogoDetalle.setUsuIdregistro(obtenerUsuarioLogeado().getUsuId().intValue());
                this.catalogoServicio.create(catalogoDetalle);
            } else {
                this.catalogoServicio.edit(catalogo);
            }
            if (!this.catalogoDetalleList.contains(this.catalogoDetalle)) {
                this.catalogoDetalleList.add(this.catalogoDetalle);
            }
            ponerMensajeInfo(NADA, "Registro Guardado");
        } catch (Exception e) {
            ponerMensajeError(NADA, "ERROR " + e.getLocalizedMessage());
        }

    }

    public void removerDetalle() {
        try {
            if (this.catalogoDetalle.getCatCodigo() != null) {
              //  this.catalogoDetalle.setCatEstado(Boolean.FALSE);
                this.catalogoServicio.edit(catalogo);
            }
            this.catalogoDetalleList.remove(this.catalogoDetalle);
            ponerMensajeInfo(NADA, "Registro Removido");
        } catch (Exception e) {
            ponerMensajeError(NADA, "ERROR " + e.getLocalizedMessage());
        }
    }

    public Catalogo getCatalogo() {
        return catalogo;
    }

    public void setCatalogo(Catalogo catalogo) {
        this.catalogo = catalogo;
    }

    public Catalogo getCatalogoDetalle() {
        return catalogoDetalle;
    }

    public void setCatalogoDetalle(Catalogo catalogoDetalle) {
        this.catalogoDetalle = catalogoDetalle;
    }

    public List<Catalogo> getCatalogoDetalleList() {
        return catalogoDetalleList;
    }

    public void setCatalogoDetalleList(List<Catalogo> catalogoDetalleList) {
        this.catalogoDetalleList = catalogoDetalleList;
    }

    public List<Catalogo> getCatalogoList() {
        return catalogoList;
    }

    public void setCatalogoList(List<Catalogo> catalogoList) {
        this.catalogoList = catalogoList;
    }

    public boolean isNuevo() {
        return nuevo;
    }

    public void setNuevo(boolean nuevo) {
        this.nuevo = nuevo;
    }
}
